package com.stu_ques.common.dao.impl;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.Map.Entry;

import com.stu_ques.common.dao.IBaseDao;
import com.stu_ques.common.util.FileUtil;
import com.stu_ques.demo.pojo.King;

public class BaseDaoImpl<T> implements IBaseDao<T>
{
	/*把皇上放到一个容器中*/
	protected Map<Integer, T> resuMap = new TreeMap<Integer, T>();
	/*	创建一个工具类	*/
	protected FileUtil fileUtil = new FileUtil();
	/*	创建一个工具类	*/
	/*	如果 此处路径不带盘符  那么 默认的是eclipse 项目空间的路径 存储到项目空间中	*/
	protected File pathname = new File("L\\docs");
	/**
	 *	临时id  为子ID 赋值
	 */
	protected int tempId ;
	/*id不能重复*/
	protected int id = 1;
	/**
	 * id 不能重复
	 * */
	protected void idCount()
	{
		id ++ ;
	}
	/**
	 * 	读文件
	 * */
	protected void readFile(File file)
	{
		Object obj = this.fileUtil.readFile(file);
		if(obj != null)
		{
			/* 父类转换的子类需要强转
			 * 因为当时存储的时候是List,取的时候也是List */
			List<Object> dataList = (List<Object>) obj ; 
			/* 从List中取第一个值 */
			this.resuMap = (Map<Integer, T>) dataList.get(0) ; 
			/* 从List中取第二个值 */
			this.id = (int) dataList.get(1);
		}
	}
	/**
	 *	 写文件
	 * */
	protected void writeOneFile(File file)
	{
		/*	文件存储到List中	*/
		List<Object> dataList  = new ArrayList<Object>();
		/*	存储皇上的属性	*/
		dataList.add(resuMap);
		/*	id的最大值	*/
		dataList.add(this.id);
		if(!this.fileUtil.writeFile(file, dataList))
		{
			System.out.println("=保存失败=");
		}
	}
	public int saveOneDao(T t)
	{
		/*	为Id赋值	*/
		this.idCount();
		this.resuMap.put(this.tempId, t);
		return this.tempId;
	}

	@Override
	public void updateOneDao(T t)
	{
		this.resuMap.put(this.tempId, t);
	}

	@Override
	public void deleteOneDao(T t)
	{
		this.resuMap.remove(this.tempId);
	}

	/**
	 * 	查询一条记录的实现方法
	 * */
	@Override
	public T selectOneDao(Map<String, Object> condMap)
	{
		/**
		 * 通过皇上ID查询
		 * */
		if(condMap.get("id") != null)
		{
			Integer id = (Integer)condMap.get("id");
			
			return this.resuMap.get(id);
		}
		return null;
	}
	/**
	 *	实现查询所有记录的
	 * 	放入Lise中 
	 * */
	@Override
	public List<T> selectListDao()
	{
		List<T> dataList = new ArrayList<T>();
		/*
		 *	 循环Map  打印Map中的内容
		 * 	同时将Map中的值对应的List返回
		 * */
		Set<Entry<Integer, T>> entrySet=this.resuMap.entrySet();
		for (Iterator iterator = entrySet.iterator(); iterator.hasNext();)
		{
			Entry<Integer, T> entry = (Entry<Integer, T>) iterator.next();
			/*从Entry中取键和值*/
			int key = entry.getKey();
			T t = entry.getValue();
			dataList.add(t);
		}
		return dataList;
	}
	@Override
	public int selectMaxIdDao()
	{
		return this.id;
	}

}
